package com.battery.system.service.battery;

import com.battery.common.core.domain.Ztree;
import com.battery.common.json.JSONObject;
import com.battery.system.domain.BO.PartnerBO;
import com.battery.system.domain.Partner;
import com.battery.system.domain.PartnerUser;
import com.battery.system.domain.VO.Finance;
import com.battery.system.domain.VO.PartnerDevAllotVO;
import com.battery.system.domain.VO.PartnerVO;
import com.battery.system.domain.VO.PartnerVV;
import com.battery.system.service.IBaseService;

import java.util.List;

/**
 * 合作商Service接口
 *
 * @author battery
 * @date 2021-01-21
 */
public interface IPartnerService extends IBaseService<Partner> {
    /**
     * 查询合作商
     *
     * @param id 合作商ID
     * @return 合作商
     */
    public Partner selectPartnerById(String id);

    /**
     * 查询合作商列表
     *
     * @param partner 合作商
     * @return 合作商集合
     */
    public List<Partner> selectPartnerList(Partner partner);

    /**
     * 新增合作商
     *
     * @param partner 合作商
     * @return 结果
     */
    public int insertPartner(Partner partner);

    /**
     * 修改合作商
     *
     * @param partner 合作商
     * @return 结果
     */
    public int updatePartner(Partner partner);

    /**
     * 批量删除合作商
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deletePartnerByIds(String ids);

    /**
     * 删除合作商信息
     *
     * @param id 合作商ID
     * @return 结果
     */
    public int deletePartnerById(String id);

    /**
     * 查询合作商列表
     *
     * @param partnerBO
     * @return
     */
    List<PartnerVO> selectPartnerVOList(PartnerBO partnerBO);

    /**
     * 添加顶级合作商
     *
     * @param partner
     * @return
     */
    int addTopLevelPartner(Partner partner);

    /**
     * 更新顶级合作商
     *
     * @param partner
     * @return
     */
    int updateTopLevelPartner(Partner partner);

    /**
     * 查询该合作商的直营合作商数量
     *
     * @param parentId 合作商ID
     * @return
     */
    int selectCountByParentId(String parentId);


    /**
     * 根据ID逻辑删除合作商
     *
     * @param id
     * @return
     */
    int deleteLogicPartnerById(String id);


    /**
     * @return
     */
    List<Ztree> selectPartnerTree();

    List<PartnerVV> selectPartnerVOLists(String id, int i);

    PartnerVV selectPartnerVOListsById(String id);

    /**
     * 查询顶级合作商列表数据
     *
     * @return
     */
    List<PartnerVO> selectHeadPartnerVOList();

    PartnerUser selectApplyCount(String id);

    Finance selectFinanceCount(JSONObject json);

    /**
     * 查询合作商营业额top6
     *
     * @return
     */
    List<Partner> selectPartnerTop6List();

    /**
     * 设备-调拨专用 用于获取合作商信息包含他自身
     *
     * @param accountId
     * @return
     */
    List<PartnerDevAllotVO> selectPartnersDevAllot(String accountId, String keywords);

    /**
     * 合作商 统计分析
     *
     * @param id
     * @return
     */
    PartnerVO selectStatisticalAnalysisVo(String id);


    List<Ztree> selectPartnerTreeSelf(String id);
}
